load packages

#devtools::install_github("king4k1/seoulsubway")
library(seoulsubway)
library(data.table)
data("subway_data_DT")
data("subway_data")

#save(file="D:/seoulsubway/subway_data.RData", subway_data)
#save(file="D:/seoulsubway/subway_data_DT.RData", subway_data_DT)
#save(file="D:/seoulsubway/seoul_station.RData", seoul_station)

get station_name vector for construct matrix

transaction_data <- fread(file=file.choose(), encoding = "UTF-8")
# choose transaction data

seoul_route <- transaction_data%>%select(승차역명, 승차호선명)
seoul_route <- unique(seoul_route)
ind1 <- str_locate(seoul_route$승차역명, "[(]")
ind <- ind1[-which(is.na(ind1[,1])),1]
ind2 <- which(is.na(ind1[,1])==TRUE)
seoul_route$승차역명[-ind2] <- str_sub(seoul_route$승차역명[-ind2], 1, ind-1)
seoul_route$승차역명 <- str_replace(seoul_route$승차역명, "서울역", "서울")
seoul_route$승차역명 <- str_replace(seoul_route$승차역명, "이수", "총신대입구")
seoul_route$승차호선명 <- str_sub(seoul_route$승차호선명, 1, 1)
colnames(seoul_route) <- c("Name", "Line")
ind_2_A <- which(seoul_route$Name %in% c("용답","신답","용두","신설동"))
ind_2_B <- which(seoul_route$Name %in% c("도림천","양천구청","신정네거리"))
ind_5_A <- which(seoul_route$Name %in% c("둔촌동","올림픽공원","방이", "오금","개롱","거여","마천"))
ind_6_A <- which(seoul_route$Name %in% c("역촌","독바위","구산"))
seoul_route[ind_2_A,]$Line <- "2-A"
seoul_route[ind_2_B,]$Line <- "2-B"
seoul_route[ind_5_A,]$Line <- "5-A"
seoul_route[ind_6_A,]$Line <- "6-A"
seoul_route[seoul_route$Name=="신설동"][1]$Line <- "1" # 신설동역 2가지 호선에 대하여 하나는 1호선으로 표기 필요
head(seoul_route)
seoul_route[which(seoul_route$Name%in%c("불광","연신내")),][c(2,4),"Line"] <- "6-A"
seoul_route[which(seoul_route$Name%in%c("오금")),"Line"]  <- c("3", "5-A")
seoul_route[which(seoul_route$Name%in%c("강남")),"Line"]
seoul_station <- subway_data_DT$Name
seoul_station <- sort(unique(seoul_station))
subway_make_list <- data.frame(matrix(0,1,468))
colnames(subway_make_list) <- seoul_station
head(subway_make_list)

function to get route : get_path()

depart <- seoul_route[1,]$Name ; depart_line <- seoul_route[1,]$Line
arrival <- seoul_route[2,]$Name ; arrival_line <- seoul_route[2,]$Line

get_path<- function(depart, depart_line, arrival, arrival_line){
result <- shortestpath(depart, depart_line, arrival, arrival_line)

if(result$Time==300){
  Path <- "no result"
  ind <- 0
  result$Info <- data.frame(matrix(0,5,5))
}
if(result$Time!=300 & nrow(result$Info)==1){
  Path <- result$Path
  Path <- Path$Name
}
if(result$Time!=300 & nrow(result$Info)==2){
  Path <- rbind(result$Path1, result$Path2)
  Path <- Path[-which(duplicated(Path$Name)),]$Name
}
if(result$Time!=300 & nrow(result$Info)==3){
  Path <- rbind(result$Path1, result$Path2, result$Path3)
  Path <- Path[-which(duplicated(Path$Name)),]$Name
}
if(result$Time!=300 & nrow(result$Info)==4){
  Path <- rbind(result$Path1, result$Path2, result$Path3, result$Path4)
  Path <- Path[-which(duplicated(Path$Name)),]$Name
}
return(data.frame(station=Path))
}

result <- get_path(depart="봉화산", depart_line="6",
                       arrival="강동", arrival_line="5-A")

change_ds_sna <- function(input){
  n <- nrow(input)
  if(n!=1){
  dat <- data.frame(matrix(0,n-1,2))
  colnames(dat) <- c("from","to")
  for(i in 1:(n-1)){
    dat[i,] <- c(as.character(input$station[i]),
                 as.character(input$station[i+1]))
  }
  }
  if(n==1){
    dat <- data.frame("from"=input$station, "to"=input$station)
  }
  return(dat)
}

change_ds_sna(result)

get list format R data

seoul_route <- seoul_route%>%arrange(Name)
subway_route2 <- list()
for(i in 1:277){
  for(j in i:277){
    subway_route2[[paste0(seoul_route[i,]$Name,"(",seoul_route[i,]$Line,")",
                            "-",seoul_route[j,]$Name,"(",seoul_route[j,]$Line,")")]] <- tryCatch(get_path(depart=seoul_route[i,]$Name, depart_line=seoul_route[i,]$Line,
                       arrival=seoul_route[j,]$Name, arrival_line=seoul_route[j,]$Line),
                       error = function(e) {c("no result",0)
                                 })
  }
  if(i %in% c(10*(1:25),277)){
    #save(file="D:/subway_analysis/data/subway_route2.RData",subway_route2, seoul_route)
    save(file="/home/students/kson/subway_route2.Rdata", subway_route2)
  }
}

get_path(depart=seoul_route[i,]$Name, depart_line=seoul_route[i,]$Line,
                       arrival=seoul_route[j,]$Name, arrival_line=seoul_route[j,]$Line)

handling for complete data set

find_null <- rep(0,38226)
null_set <- c()
for(i in 1:38226){
  if(is.null(nrow(subway_route2[[i]]))==TRUE){
    null_set[i] <- (i)
  }else{
  find_null[i] <- nrow(subway_route2[[i]])
  }
}

k <- which(is.na(null_set)==FALSE)
null_route_name <-names(subway_route2)[k]
null_route <- as.data.frame(null_route_name)

null_route <- tidyr::separate(null_route, null_route_name, c("depart","depart_line","arrival", "arrival_line"), sep="[(a)]")
null_route$arrival <- str_remove(null_route$arrival, "-")

ind<- which(null_route$arrival%in%c("마곡", "김포공항","송정","방화"))
ind2<- which(null_route$arrival%in%c("도림천","신정네거리","양천구청"))
ind3 <- which(null_route$depart%in%c("불광","연신내","응암"))
ind4 <- which(null_route$depart%in%c("녹번","지축"))
ind5 <- which(null_route$arrival%in%c("지축"))
ind6 <- which(null_route$depart%in%c("양평"))
get_path("구파발","3", "신도림","2")

rbind(get_path("부천시청","7", "영등포구청","5"), get_path("양평", "5","송정","5"))

for(i in ind2){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i],arrival="응암",arrival_line="6"), get_path( depart = "새절", depart_line="6", arrival=null_route$arrival[i], arrival_line =null_route$arrival_line[i]))
}

for(i in ind5){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i],"구파발","3"),data.frame(station="지축",ind="57"))
}

for(i in ind6){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i],"영등포구청","5"),get_path(depart = "양평", depart_line = "5", arrival=null_route$arrival[i], arrival_line =null_route$arrival_line[i]))

}

for(i in ind){
subway_route2[[null_route_name[i]]] <- get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i], arrival=null_route$arrival[i], arrival_line =null_route$arrival_line[i])
}

for(i in ind){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i], arrival="영등포구청", arrival_line ="5"), get_path("양평", "5",null_route$arrival[i],"5")) 
}

for(i in ind2){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i], arrival="신도림", arrival_line ="2"), get_path("도림천", "2-B",null_route$arrival[i],"2-B")) 
}

subway_route <- subway_route2
#save(file="C:/Users/82104/Desktop/subway_route.RData",subway_route2)
#save(file="C:/Users/82104/Desktop/seoul_route.RData", seoul_route)


for(i in ind){
subway_route2[[null_route_name[i]]] <-  rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i], arrival="영등포구청", arrival_line ="5"), get_path("양평", "5",null_route$arrival[i],"5")) 
}

for(i in ind){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i],"구파발","3"),data.frame(station="지축",ind="412"))
}

rbind(get_path(depart="응암", "6-A", "구파발","3"), data.frame(station="지축",ind="412"))

for(i in ind){
subway_route2[[null_route_name[i]]] <- rbind(get_path("양평", "5","영등포구청", "5"), get_path("영등포구청", "5",null_route$arrival[i],null_route$arrival_line[i]))
}

for(i in ind3){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i],"구파발","3"),data.frame(Path="지축",ind="412"))
}

for(i in ind){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i],"연신내","3"),get_path(depart = "응암", depart_line = "6",null_route$arrival[i],null_route$arrival_line[i]))
}

which(seoul_station%in%"지축")

which(seoul_station%in%"양평")


for(i in ind){
subway_route2[[null_route_name[i]]] <- rbind(get_path(depart = null_route$depart[i], depart_line = null_route$depart_line[i],arrival="응암",arrival_line="6"), get_path( depart = "새절", depart_line="6", arrival=null_route$arrival[i], arrival_line =null_route$arrival_line[i]))
}

for(i in 1:38226){
colnames(subway_route2[[i]]) <- c("station", "ind")
}

make function to get total_count from subway path

data("subway_sample")
dat <- subway_sample
get_total_count <- function(dat, depart_name, depart_line_name, arrival_name, arrival_line_name){
  data("subway_data_DT")
  seoul_station <- subway_data_DT$Name
  seoul_station <- sort(unique(seoul_station))
  subway_make_list <- data.frame(matrix(0,1,460))
  colnames(subway_make_list) <- seoul_station
  depart <- dat[,depart_name]
  depart_line <- dat[,depart_line_name]
  arrival <- dat[,arrival_name]
  arrival_line <- dat[,arrival_line_name]
  for(i in 1:nrow(dat)){
    get <- paste0(depart[i], "(", depart_line[i], ")", "-", 
                  arrival[i], "(", arrival_line[i], ")")
    get_2 <- paste0(arrival[i], "(", arrival_line[i], ")", "-",
                    depart[i], "(", depart_line[i], ")")
    result <- subway_route[[get]]
    if(is.null(result)){
    result <- subway_route[[get_2]]  
    }
  subway_make_list[result$ind] <- subway_make_list[result$ind] + 1
  }
  return(subway_make_list)
}

get_total_count(dat=dat, depart_name = "up_Name", depart_line_name = "up_Line", arrival_name = "down_Name", arrival_line_name = "down_Line")

data(subway_route)
data("seoul_route")
ind <- which(seoul_route$Line=="6-A")
which(seoul_route$Name=="새절")
subway_route2 <- list()
data("seoul_station")
i <- 14;j<-135
for(i in 1:277){
  for(j in i:277){
    subway_route2[[paste0(seoul_route[i,]$Name,"(",seoul_route[i,]$Line,")",
                            "-",seoul_route[j,]$Name,"(",seoul_route[j,]$Line,")")]] <- get_path(depart=seoul_route[i,]$Name, depart_line=seoul_route[i,]$Line,
                       arrival=seoul_route[j,]$Name, arrival_line=seoul_route[j,]$Line)
  }
    if(i %in% c(10*(1:25),277)){
    save(file="D:/subway_route2.RData",subway_route2)
  }
}


for(i in 1:9621){
  subway_route_sna[[ind[i]]] <- NULL
}


king4k1/seoulsubway documentation built on Nov. 18, 2019, 3:38 p.m.